package com.sky.utils;

/**
 * @author dongdong 抖音号：W13883155245
 * @version 1.0
 * @date 2025/10/5
 * @description
 */
import com.google.zxing.WriterException;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

public class WechatQrCodeDemo {

    // 替换为你的微信开放平台配置
    private static final String WECHAT_APPID = "wxb4ada260190b4f5c"; // 你的AppID
    private static final String REDIRECT_URI = "https://37080d52.r23.cpolar.top/user/user/login"; // 你的回调地址

    public static void main(String[] args) {
        try {
            // 1. 构建微信登录链接（URLEncode回调地址）
            String encodedRedirectUri = java.net.URLEncoder.encode(REDIRECT_URI, "UTF-8");
            String randomState = "STATE_" + System.currentTimeMillis(); // 随机state（建议存Redis用于后续验证）

            // 微信登录完整链接
            String wechatLoginUrl = String.format(
                    "https://open.weixin.qq.com/connect/qrconnect?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_login&state=%s#wechat_redirect",
                    WECHAT_APPID, encodedRedirectUri, randomState
            );

            // 2. 生成微信登录二维码（两种方式任选）
            // 方式1：保存为本地文件（测试用）
            QrCodeGenerator.generateQrCodeToFile(wechatLoginUrl, "D:/wechat_login_qr.png");
            System.out.println("微信登录二维码已保存到本地");

            // 方式2：生成自定义颜色的二维码（微信绿前景色）
            BufferedImage wechatQrImage = QrCodeGenerator.generateCustomColorQrCode(
                    wechatLoginUrl,
                    200, 200,
                    new Color(7, 193, 96), // 微信绿（#07C160）
                    Color.WHITE
            );
            // 转为字节数组（可返回给前端）
            byte[] qrBytes = QrCodeGenerator.bufferedImageToBytes(wechatQrImage);
            System.out.println("自定义颜色二维码字节数组长度：" + qrBytes.length);

        } catch (UnsupportedEncodingException e) {
            System.err.println("URL编码异常：" + e.getMessage());
        } catch (WriterException e) {
            System.err.println("二维码生成异常：" + e.getMessage());
        } catch (IOException e) {
            System.err.println("IO异常：" + e.getMessage());
        }
    }
}
